package com.mokairui.method_references;

import lombok.extern.slf4j.Slf4j;

import java.util.function.Consumer;

/**
 * @Description 方法引用大致为如下几种情况
 *                  对象::实例方法名
 *                  类::静态方法名
 *                  类::实例方法名
 * @Author Mokairui
 * @Since 2021/11/6
 */
@Slf4j(topic = "c.MethodReferences")
public class MethodReferences {
    public static void main(String[] args) {
        Consumer<Person> personConsumer = Person::getName; // 实例方法, Lambda的参数作为调用方法对象

        Consumer<Integer> consumer = Person::getAge; // 静态方法, Lambda的参数只能作为方法的参数了

        Person person = new Person();
        // 实例方法无参数说了, 有参如果要让Lambda的参数作为调用对象的话,参数就不好确定了,
        // 所以只能自己传递对象, 而Lambda的参数作为方法参数进行传递
        Consumer<String> stringConsumer = person::getArgsMethod; // 有参数的实例方法
    }

    static class Person {
        public void getName() {
            log.debug("实例方法");
        }

        public static void getAge(int age) {
            log.debug("静态方法带参数: {}", age);
        }

        public void getArgsMethod(String name) {
            log.debug("有参数的实例方法: {}", name);
        }
    }
}
